﻿using System;
using System.Xml.Serialization;

namespace Neovolve.Extensibility.VisualStudio.TestProfilerLink
{
    /// <summary>
    /// The <see cref="TestFramework"/>
    /// class is used to describe a unit testing framework.
    /// </summary>
    [Serializable]
    public class TestFramework : ApplicationBase
    {
        /// <summary>
        /// Gets or sets the assembly test format.
        /// </summary>
        /// <value>The assembly test format.</value>
        [XmlElement]
        public String AssemblyTestFormat
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the assembly ussage.
        /// </summary>
        /// <value>The assembly ussage.</value>
        [XmlElement]
        public String AssemblyUssage
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the class test format.
        /// </summary>
        /// <value>The class test format.</value>
        [XmlElement]
        public String ClassTestFormat
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the file usage.
        /// </summary>
        /// <value>The file usage.</value>
        [XmlElement]
        public String FileUsage
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets a value indicating whether load tests are identified by an attribute on a method.
        /// </summary>
        /// <value>
        /// 	<c>true</c> if load tests are identified by an attribute on a method; otherwise, <c>false</c>.
        /// </value>
        [XmlElement]
        public Boolean IdentifyLoadTestByAttribute
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the type of the load test attribute.
        /// </summary>
        /// <value>The type of the load test attribute.</value>
        [XmlElement]
        public String LoadTestAttributeType
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the load test extension.
        /// </summary>
        /// <value>The load test extension.</value>
        [XmlElement]
        public String LoadTestExtension
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the load test format.
        /// </summary>
        /// <value>The load test format.</value>
        [XmlElement]
        public String LoadTestFormat
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the solution usage.
        /// </summary>
        /// <value>The solution usage.</value>
        [XmlElement]
        public String SolutionUsage
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets a value indicating whether the framework supports load tests.
        /// </summary>
        /// <value><c>true</c> if the framework supports load tests; otherwise, <c>false</c>.</value>
        [XmlElement]
        public Boolean SupportsLoadTests
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the test assembly project guid.
        /// </summary>
        /// <value>The test assembly project guid.</value>
        [XmlElement]
        public String TestAssemblyProjectGuid
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the type of the test class attribute.
        /// </summary>
        /// <value>The type of the test class attribute.</value>
        [XmlElement]
        public String TestClassAttributeType
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the type of the test method attribute.
        /// </summary>
        /// <value>The type of the test method attribute.</value>
        [XmlElement]
        public String TestMethodAttributeType
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the unit test format.
        /// </summary>
        /// <value>The unit test format.</value>
        [XmlElement]
        public String UnitTestFormat
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the unit test usage.
        /// </summary>
        /// <value>The unit test usage.</value>
        [XmlElement]
        public String UnitTestUsage
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the usage.
        /// </summary>
        /// <value>The usage.</value>
        [XmlElement]
        public String Usage
        {
            get;
            set;
        }
    }
}